#include <stdio.h>
#include <math.h>
#include <stdlib.h>

/*
函数名: abs
功  能: 函数返回参数num.的绝对值
用  法: int abs( int num );
*/

static void test_abs()
{
    int i = -1;
    printf("%d\n", abs(i));
}
/*
函数名:   asin
功  能:  函数返回参数arg的反正弦值。参数arg 应当在-1和1之间。
用  法:  double asin( double arg );
*/
static void test_asin()
{
    double i = 0;
    double d = asin(i);
    printf("%f", d);
}

/*
函数名:   ceil
功  能:  函数返回参数不小于num 的最小整数
用  法:  double ceil( double num );
*/
static void test_ceil()
{
    double x = 4.25;
    double y = ceil(x);
    printf("%f\n", y); // 5.0
}
/*
函数名:   div
功  能:  函数返回参数numerator / denominator的商和余数。结构类型div_t定义在stdlib.h中
用  法:  div_t div( int numerator, int denominator );
*/
static void test_div()
{
    int i = 5;
    int k = 2;
    div_t temp;
    temp = div(i, k);
    printf("%d,%d\n", temp.quot, temp.rem); // 2,1
}

/*
函数名:   exp
功  能: 函数返回 e (2.7182818) 的arg次幂。
用  法:  double exp( double arg );
*/
static void test_exp()
{
    double i = exp(1);
    printf("%f\n", i);
}
/*
函数名:   fabs
功  能: 函数返回参数arg的绝对值。
用  法: double fabs( double arg );
*/
static void test_fabs()
{
    double i = -7.215;
    double y = fabs(i);
    printf("%f\n", y);
}

/*
函数名:   floor
功  能:函数返回参数不大于arg的最大整数
用  法: double floor( double arg );
*/
static void test_floor()
{
    double i = 23.345;
    double x = floor(i);
    printf("%f\n", x); // 23.0000
}
/*
函数名:   fmod
功  能: 函数返回参数x/y的余数。
用  法: double fmod( double x, double y );
*/
static void test_fmod()
{
    double mo = fmod(5.2, 2.0);
    printf("%f\n", mo); // 1.20000
}
/*
函数名:   frexp
功  能: 函数将参数num 分成两部分： 0.5 和1之间的尾数（由函数返回）并返回指数exp。把一个浮点数分解为尾数和指数
用  法: double frexp( double num, int *exp );
*/
static void test_frexp()
{
    double x = 1024, fraction;
    int e;
    fraction = frexp(x, &e);
    printf("%f,%d", fraction, e); // 0.5 11  (0.5 * 2^11=1024);
}
/*
函数名:   ldexp
功  能: 函数返回参数num * (2 ^ exp)。如果发生溢出返回HUGE_VAL
用  法: double ldexp( double num, int exp );
*/
static void test_ldexp()
{
    int i = 12;
    int y = 3;
    double z = ldexp(i, y);
    printf("%f\n", z); // 96 (12 * 2^3)
}

/*
函数名:   modf
功  能: 函数将参数num 分割为整数和小数，返回小数部分并将整数部分赋给i
用  法: double modf( double num, double *i );
*/
static void test_modf()
{
    double x = 4.4556;
    double i;
    double y = modf(x, &i);
    printf("%f,%f", i, y); // 4.000000,0.455600
}
/*
函数名:   pow
功  能: 函数返回以参数base 为底的exp 次幂。如果base为零或负和exp 小于等于零或非整数时,产生域错误。如果溢出，产生范围错误。
用  法: double pow( double base, double exp );
*/
static void test_pow()
{
    double x = 2.0;
    double y = 3.0;
    double z = pow(x, y);
    printf("%f\n", z);
}
/*
函数名:   sqrt
功  能: 函数返回参数num的平方根。如果num为负,产生域错误。
用  法:  double sqrt( double num );
*/

static void test_sqrt()
{
    double d = 4.0;
    double y = sqrt(d);
    printf("%f\n", y); // 2.000000
}

int main15()
{
    test_sqrt();
    //  test_pow();
    // test_modf();
    // test_ldexp();
    // test_frexp();
    // test_fmod();
    //    test_floor();
    //   test_fabs();
    // test_exp();
    // test_div();
    // test_ceil();
    //  test_asin();
    //  test_cabs();
    // test_abs();
    return 0;
}
